package com.sz.biz.logistics.ord.service;

import com.sz.biz.logistics.core.entity.ProductServiceRel;
import com.sz.biz.logistics.ord.entity.OrdTrackingMessage;
import com.sz.biz.logistics.ord.enums.TrackMessageToServiceEnum;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * Function: 物流跟踪service <br>
 * Author: hpeng.wang <br>
 * Date: 2017-03-31 13:46:00
 */

public interface OrdTrackingMessageService {
    /**
     * 新增
     *
     * @param entry 新增的实体
     * @return 新增是否成功
     */
    void save(OrdTrackingMessage entry);

    /**
     * 批量新增
     *
     * @param list 新增的实体
     */
    void batchSave(List<OrdTrackingMessage> list);

    List<OrdTrackingMessage>  findReceTracking(TrackMessageToServiceEnum eventCode);
    OrdTrackingMessage findCurrentTracking(String waybillNo);

    /**
     * 根据运单号、产品的uid、运单创建时间，找出当前订单走到哪个服务节点
     * @param waybillNo 运单号
     * @param productUid 产品的uid
     * @param orderCreateTime 订单创建的时间
     * @return 找到的服务节点，无数据返回null
     */
    ProductServiceRel findCurServiceByTracking(String waybillNo, String productUid, Date orderCreateTime);
    void updateStatusByIds(List<Integer> ids, int status);
    void batchUpdateStatusByIds(Map<Integer,Integer> idStatusMap);

    /**
     * 根据主键Id查询单个实体
     *
     * @param id 主键id
     * @return 查询出来的实体对象
     */
    OrdTrackingMessage findById(Integer id);

    String findServiceUidByWaybillNo(String waybillNo, int supplierId);
    List<OrdTrackingMessage> findServiceUidByWaybillNos(List<String> waybillNos, List<Integer> supplierIds);
    /**
     * 根据运单号查询当前订单，最后一条阻塞的物流信息，并发返回
     *
     * @param waybillNo 订单号
     * @return 阻塞的物流信息 ，如果没有，则返回空
     */
    OrdTrackingMessage findBlockTracking(String waybillNo);
}
